package ar.com.uade.administradorsiembra.modelo;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import ar.com.uade.administradorsiembra.modelo.exceptions.CantidadSembradaInsuficienteParaCosechaException;
import ar.com.uade.administradorsiembra.modelo.exceptions.LoteInexistenteException;
import ar.com.uade.administradorsiembra.views.LoteCompuestoView;
import ar.com.uade.administradorsiembra.views.LoteView;

public class LoteCompuesto extends Lote {
	private LinkedList<Lote> lotes;

	public LoteCompuesto(Integer numeroLote) {
		super(numeroLote);

	}

	public LoteCompuesto(Integer id, Integer numeroLote) {
		super(id, numeroLote);

	}
	
	public void agregarLote(Lote lote) {
		this.lotes.add(lote);
	}

	public void agregarLotes(List<Lote> lotes) {
		for (Lote lote : lotes) {
			this.agregarLote(lote);
		}
	}
	
	public void removerLote(Lote lote) throws LoteInexistenteException {
		if (!this.lotes.remove(lote)) {
			throw new LoteInexistenteException();
		}
	}

	public void eliminar() {
		for (Lote lote : lotes) {
			lote.eliminar();

		}
	}

	@Override
	public void cosechar(Float cantidad)
			throws CantidadSembradaInsuficienteParaCosechaException {
		// TODO Auto-generated method stub
		for (Lote lote : lotes) {
			lote.cosechar(cantidad);

		}
	}

	public void setUltimoCereal(Cereal ultimoCereal) {
		for (Lote lote : lotes) {
			lote.setUltimoCereal(ultimoCereal);

		}
	}

	public void sembrar(Float cantidad) {
		for (Lote lote : lotes) {
			lote.sembrar(cantidad);

		}
	}

	@Override
	public Float getArea() {
		Float areaTotal = new Float(0);
		for (Lote lote : lotes) {
			areaTotal = +lote.getArea();
		}
		return areaTotal;
	}
	
	public LinkedList<Lote> getLotes() {
		return this.lotes;
	}

	public void borrarLotes() {
		// TODO Auto-generated method stub
		this.lotes.clear();
	}
	
	public LoteCompuestoView getLoteCompuestoView() {
		// TODO Auto-generated method stub
		LoteCompuestoView view = new LoteCompuestoView();
		ArrayList<LoteView> loteSimpleView = new ArrayList<LoteView>();
		
		view.setId(super.getId());
		view.setNumeroLote(super.getNumeroLote());
		view.setArea(super.getArea());
		view.setPropietario(super.getPropietario().getView());
		
		for (Lote lote : this.getLotes()) {
			if(lote instanceof LoteSimple) {
				loteSimpleView.add(((LoteSimple)lote).getView());
			}
		}
		
		view.setLotes(loteSimpleView);
		
		return view;
	}
}
